package com.tuzhi.common.structure;

import java.util.LinkedList;
import java.util.List;

public class MyQueue {

    private LinkedList data = new LinkedList();

    public MyQueue(){
    }

    public MyQueue(List list){
        this.data = new LinkedList(list);
    }

    /**
     * 向队列添加一个元素，只能加入到队尾
     * @param obj
     */
    public void add(Object obj){
        this.data.addLast(obj);
    }

    public int size() {
        return data.size();
    }

    /**
     * 查看队首元素，数据还保留在队列中
     * @return
     */
    public Object peek(){
        if (data.isEmpty()){
//            log.warn("队列中没有元素！");
            return null;
        }
        return data.getFirst();
    }
    /**
     * 删除队首元素
     * @return
     */
    public boolean remove(){
        if (data.isEmpty()){
//            log.warn("队列中没有元素！");
            return false;
        }
        data.removeFirst();
        return true;
    }
    /**
     * 弹出元素，即获取队首元素并将其从队列中删除
     * @return
     */
    public Object pop(){
        if (data.isEmpty()){
//            log.warn("队列中没有元素！");
            return null;
        }
        return data.removeFirst();
    }
    /**
     *  在队列中查找元素，返回第一次出现的位置
     * @param obj
     * @return
     */
    public int indexOf(Object obj){
        return data.indexOf(obj);
    }
    /**
     * 在队列中查找元素，返回最后一次出现的位置
     * @param obj
     * @return
     */
    public int lastIndexOf(Object obj){
        return data.lastIndexOf(obj);
    }
    /**
     * 判断队列是否为空
     * @return
     */
    public boolean isEmpty(){
        return data.isEmpty();
    }
    /**
     * 清除队列中所有元素
     */
    public void clear(){
        data.clear();
    }
}
